Ext.define('CS.config.BaseConfig', {

	config: undefined,

	initConfig: Ext.emptyFn,

	constructor: function(config) {
		var me = this;

		if (Ext.isString(config)) {
			config = Ext.decode(config);
		}

		me.initDefaultConfig(config);
		me.initConfig(config);
		me.initPlugins(config);

		me.config = config;
	},

	initDefaultConfig: function(config) {
		var me = this;

		if (CS.isNotNull(config.proMap)) {
			CS.transConfigValue(config.proMap);

			CS.apply(config, config.proMap);
			delete config.proMap;
		}

		if (CS.isNotNull(me.transform)) {
			CS.transConfigParam(config, me.transform);
		}

		if (CS.isNotNull(me.defaultConfig)) {
			CS.setDefaultConfig(config, me.defaultConfig);
		}

		if (CS.isNotEmpty(config.url)) {
			config.url = CS.getRootUrl(config.url);
		}

		config.extendParam = {};
		if (CS.isNotEmpty(config.params)) {
			config.extendParam = CS.transKeyValue(config.params);

			CS.transConfigValue(config.extendParam);

			delete config.params;
		}
	},

	initPlugins: function(config) {
		if (CS.isNotEmpty(config.plugins)) {
			config.plugins = config.plugins.split(',');
		} else {
			config.plugins = [];
		}

		if (CS.isNotNull(this.defaultPlugins)) {
			config.plugins = config.plugins.concat(this.defaultPlugins);
		}
	},

	getConfig: function() {
		return this.config;
	}

});
